// 2021节假日, 包含周末

import { formatDate, getMonthRange } from '@/utils/date';

// 每年需要更新
const holidays = {
  202010: {
    1: 2,
    2: 2,
    3: 2,
    4: 2,
    5: 2,
    6: 2,
    7: 2,
    8: 2,
    11: 1,
    17: 1,
    18: 1,
    24: 1,
    25: 1,
    31: 1,
  },
  202011: {
    1: 1,
    7: 1,
    8: 1,
    14: 1,
    15: 1,
    21: 1,
    22: 1,
    28: 1,
    29: 1,
  },
  202012: {
    5: 1,
    6: 1,
    12: 1,
    13: 1,
    19: 1,
    20: 1,
    26: 1,
    27: 1,
  },
  202101: {
    1: 2,
    2: 1,
    3: 1,
    9: 1,
    10: 1,
    16: 1,
    17: 1,
    23: 1,
    24: 1,
    30: 1,
    31: 1,
  },
  202102: {
    6: 1,
    11: 2,
    12: 2,
    13: 2,
    14: 2,
    15: 2,
    16: 2,
    17: 2,
    21: 1,
    27: 1,
    28: 1,
  },
  202103: {
    6: 1,
    7: 1,
    13: 1,
    14: 1,
    20: 1,
    21: 1,
    27: 1,
    28: 1,
  },
  202104: {
    3: 1,
    4: 1,
    5: 2,
    10: 1,
    11: 1,
    17: 1,
    18: 1,
    24: 1,
  },
  202105: {
    1: 2,
    2: 2,
    3: 2,
    4: 2,
    5: 2,
    9: 1,
    15: 1,
    16: 1,
    22: 1,
    23: 1,
    29: 1,
    30: 1,
  },
  202106: {
    5: 1,
    6: 1,
    12: 1,
    13: 1,
    14: 2,
    19: 1,
    20: 1,
    26: 1,
    27: 1,
  },
  202107: {
    3: 1,
    4: 1,
    10: 1,
    11: 1,
    17: 1,
    18: 1,
    24: 1,
    25: 1,
    31: 1,
  },
  202108: {
    1: 1,
    7: 1,
    8: 1,
    14: 1,
    15: 1,
    21: 1,
    22: 1,
    28: 1,
    29: 1,
  },
  202109: {
    4: 1,
    5: 1,
    11: 1,
    12: 1,
    19: 2,
    20: 2,
    21: 2,
    25: 1,
  },
  202110: {
    1: 2,
    2: 2,
    3: 2,
    4: 2,
    5: 2,
    6: 2,
    7: 2,
    10: 1,
    16: 1,
    17: 1,
    23: 1,
    24: 1,
    30: 1,
    31: 1,
  },
  202111: {
    6: 1,
    7: 1,
    13: 1,
    14: 1,
    20: 1,
    21: 1,
    27: 1,
    28: 1,
  },
  202112: {
    4: 1,
    5: 1,
    11: 1,
    12: 1,
    18: 1,
    19: 1,
    25: 1,
    26: 1,
  },
  '202201': {
    '1': 2,
    '2': 1,
    '8': 1,
    '9': 1,
    '15': 1,
    '16': 1,
    '22': 1,
    '23': 1,
    '31': 1,
  },
  '202202': {
    '1': 2,
    '2': 2,
    '3': 2,
    '4': 1,
    '5': 1,
    '6': 1,
    '12': 1,
    '13': 1,
    '19': 1,
    '20': 1,
    '26': 1,
    '27': 1,
  },
  '202203': {
    '5': 1,
    '6': 1,
    '12': 1,
    '13': 1,
    '19': 1,
    '20': 1,
    '26': 1,
    '27': 1,
  },
  '202204': {
    '3': 1,
    '4': 1,
    '5': 2,
    '9': 1,
    '10': 1,
    '16': 1,
    '17': 1,
    '23': 1,
    '30': 1,
  },
  '202205': {
    '1': 2,
    '2': 1,
    '3': 1,
    '4': 1,
    '8': 1,
    '14': 1,
    '15': 1,
    '21': 1,
    '22': 1,
    '28': 1,
    '29': 1,
  },
  '202206': {
    '3': 2,
    '4': 1,
    '5': 1,
    '11': 1,
    '12': 1,
    '18': 1,
    '19': 1,
    '25': 1,
    '26': 1,
  },
  '202207': {
    '2': 1,
    '3': 1,
    '9': 1,
    '10': 1,
    '16': 1,
    '17': 1,
    '23': 1,
    '24': 1,
    '30': 1,
    '31': 1,
  },
  '202208': {
    '6': 1,
    '7': 1,
    '13': 1,
    '14': 1,
    '20': 1,
    '21': 1,
    '27': 1,
    '28': 1,
  },
  '202209': {
    '3': 1,
    '4': 1,
    '10': 2,
    '11': 1,
    '12': 1,
    '17': 1,
    '18': 1,
    '24': 1,
    '25': 1,
  },
  '202210': {
    '1': 2,
    '2': 2,
    '3': 2,
    '4': 1,
    '5': 1,
    '6': 1,
    '7': 1,
    '15': 1,
    '16': 1,
    '22': 1,
    '23': 1,
    '29': 1,
    '30': 1,
  },
  '202211': {
    '5': 1,
    '6': 1,
    '12': 1,
    '13': 1,
    '19': 1,
    '20': 1,
    '26': 1,
    '27': 1,
  },
  '202212': {
    '3': 1,
    '4': 1,
    '10': 1,
    '11': 1,
    '17': 1,
    '18': 1,
    '24': 1,
    '25': 1,
    '31': 1,
  },
};

// 获取某个月每天的是否工作
function getMonthDayList(monthStr: string) {
  const [start, end] = getMonthRange(monthStr);
  const dayList = [];

  let anchor = new Date(start);
  // eslint-disable-next-line no-unmodified-loop-condition
  while (anchor <= end) {
    const day = formatDate('D', anchor);
    const isWorkday = ((holidays as any)[monthStr][day] ?? 0) === 0;

    dayList.push({
      isWorkday,
      date: new Date(anchor),
      dateStr: formatDate('YYYY-MM-DD', new Date(anchor)),
    });

    anchor.setDate(anchor.getDate() + 1);
  }

  return dayList;
}

export { getMonthDayList };
